package com.seleniti.enpareja.controller.ui.view;

import org.ioc.commons.flowcontrol.actioncontroller.IsExternalAction;
import org.ioc.commons.flowcontrol.eventbus.IsEvent;
import org.ioc.commons.flowcontrol.operationmanager.IsOperation;
import org.ioc.commons.ui.HasLoader;
import org.ioc.commons.ui.HasPagedDataProvider;
import org.ioc.commons.ui.HasValue;
import org.ioc.commons.ui.HasVisibility;
import org.ioc.commons.ui.IsView;
import org.ioc.commons.ui.IsViewPresenter;
import org.ioc.commons.ui.features.Info;

import com.seleniti.enpareja.controller.model.integration.database.domain.User;

public interface CoupleRequestsView extends EnParejaView<CoupleRequestsView.Event, CoupleRequestsView.Operation, CoupleRequestsView.Action>, HasPagedDataProvider<User>, HasLoader {
	@interface Fires {
		CoupleRequestsView.Event[] value();
	}

	@interface Invokes {
		CoupleRequestsView.Action[] value();
	}

	@interface Performs {
		CoupleRequestsView.Operation[] value();
	}

	public enum Event implements IsEvent {
	}

	public enum Operation implements IsOperation {
		GettingUsers, MakingRequest, DismissingCoupleRequest
	}

	public enum Action implements IsExternalAction {
	}

	public interface Presenter extends IsViewPresenter {

		void onMakeCoupleRequest();

		void onSelectedUserChanged();

		void onDismissSelectedRequest();
	}

	void startSearch();

	HasValue<String> searchBox();

	User getSelectedUser();

	HasVisibility ableToGetCoupleInfo();

	HasVisibility unableToGetCoupleInfo();

	HasVisibility makeCoupleRequestActionVisibility();

	HasVisibility requestSentInfo();

	HasVisibility requestAlreadyMadeInfo();

	Info coupleGotInfo();

	void clearSelection();
	
}
